﻿using University.Workshop.DataAccess;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using University.Workshop.Model;
using System.Windows.Forms;

namespace University.Workshop.Tests
{
    
    
    /// <summary>
    ///Se trata de una clase de prueba para UpdateAdministratorTest y se pretende que
    ///contenga todas las pruebas unitarias UpdateAdministratorTest.
    ///</summary>
    [TestClass()]
    public class UpdateAdministratorTest
    {


        private TestContext testContextInstance;

        /// <summary>
        ///Obtiene o establece el contexto de la prueba que proporciona
        ///la información y funcionalidad para la ejecución de pruebas actual.
        ///</summary>
        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        #region Atributos de prueba adicionales
        // 
        //Puede utilizar los siguientes atributos adicionales mientras escribe sus pruebas:
        //
        //Use ClassInitialize para ejecutar código antes de ejecutar la primera prueba en la clase 
        //[ClassInitialize()]
        //public static void MyClassInitialize(TestContext testContext)
        //{
        //}
        //
        //Use ClassCleanup para ejecutar código después de haber ejecutado todas las pruebas en una clase
        //[ClassCleanup()]
        //public static void MyClassCleanup()
        //{
        //}
        //
        //Use TestInitialize para ejecutar código antes de ejecutar cada prueba
        //[TestInitialize()]
        //public void MyTestInitialize()
        //{
        //}
        //
        //Use TestCleanup para ejecutar código después de que se hayan ejecutado todas las pruebas
        //[TestCleanup()]
        //public void MyTestCleanup()
        //{
        //}
        //
        #endregion


        /// <summary>
        ///Una prueba de GetOperatorByUserName
        ///</summary>
        [TestMethod()]
        public void GetOperatorByUserNameTest()
        {
            UpdateAdministrator target = new UpdateAdministrator(); // TODO: Inicializar en un valor adecuado
            string userName = "JuanPerez"; // TODO: Inicializar en un valor adecuado
            string password = "abcD#123"; // TODO: Inicializar en un valor adecuado
            Administrator expected = new Administrator(); // TODO: Inicializar en un valor adecuado
            Administrator actual = new Administrator();
            actual = target.GetOperatorByUserName(userName, password);
            Assert.IsNotNull(actual);
        }

        /// <summary>
        ///Una prueba de GetAllAdministrators
        ///</summary>
        [TestMethod()]
        public void GetAllAdministratorsTest()
        {
            UpdateAdministrator target = new UpdateAdministrator(); // TODO: Inicializar en un valor adecuado
            target.Dispose();
            DataGridView administrator = new DataGridView();
            DataGridViewTextBoxColumn UserName = new DataGridViewTextBoxColumn();
            DataGridViewTextBoxColumn Password = new DataGridViewTextBoxColumn();
            DataGridViewTextBoxColumn FullName = new DataGridViewTextBoxColumn();
            DataGridViewTextBoxColumn Surname = new DataGridViewTextBoxColumn();
            DataGridViewTextBoxColumn Email = new DataGridViewTextBoxColumn();
            UserName.Name = "UserName";
            Password.Name = "Password";
            FullName.Name = "FullName";
            Surname.Name = "Surname";
            Email.Name = "Email";
            administrator.Columns.AddRange(new DataGridViewColumn[] {UserName,
                                                                     Password,
                                                                     FullName,       
                                                                     Surname,
                                                                     Email});
            target.GetAllAdministrators(administrator);
            Assert.AreEqual(new OperatorRegister().CannotRowsAdministrator()+1,administrator.RowCount);
        }

        /// <summary>
        ///Una prueba de UpdateByUserName
        ///</summary>
        [TestMethod()]
        public void UpdateByUserNameTest()
        {
            Random ran = new Random(DateTime.Now.Millisecond);
            UpdateAdministrator target = new UpdateAdministrator(); // TODO: Inicializar en un valor adecuado
            string userName = "JuanPerez"; // TODO: Inicializar en un valor adecuado
            string password = "abcD#123"; // TODO: Inicializar en un valor adecuado
            Administrator ope = new Administrator { UserName = "JuanPerez", Password = "abcD#123",Name="pedrito",Surname="Cardenas" ,Email="pedrito"+ran.Next(400)+"@hotmail.com"}; // TODO: Inicializar en un valor adecuado
            Administrator admi = new Administrator();
            target.UpdateByUserName(userName, password, ope);
            admi = target.GetOperatorByUserName("JuanPerez", "abcD#123");
            Assert.IsNotNull(admi);
            Assert.AreEqual(ope.UserName,admi.UserName);
            Assert.AreEqual(ope.Password, admi.Password);
            Assert.AreEqual(ope.Name, admi.Name);
            Assert.AreEqual(ope.Surname, admi.Surname);
            Assert.AreEqual(ope.Email, admi.Email);
        }
    }
}
